home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
071-080
/
amok77
/
ifflib
/
ifflib.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
8KB
|
234 lines
(*---------------------------------------------------------------------------
:Program. IFFLib
:Author. Volker Rudolph/Thomas Wagner & Frédéric Pröls
:Version. 1.2
:Copyright. PD
:Language. Oberon
:Translator. Amiga-Oberon V2.14
:Imports. iff.library - Christian A. Weber
:Contents. Oberon library-module for iff.library
:Remark. Needs iff.library (Version 22 or higher) in libs: directory
:Remark. This ist the Oberon-version of the
:Remark. IFFLib-Module for M2Amiga by Fridtjof Siebert
:History. V1.0 by Volker Rudolph
:History. V1.1 by Thomas Wagner & Frédéric Pröls
:History. Update to iff.library version 22 (29-Jul-92)
:History. V1.2 by F. Siebert small chgs. for Amiga Oberon 3.0
:bugs. not tested
---------------------------------------------------------------------------*)
MODULE IFFLib;
IMPORT e := Exec,
Graphics,
i := Intuition,
sys:=SYSTEM;
CONST
iffName * = "iff.library";
iffVersion * = 22; (* Current library version *)
(************** E R R O R - C O D E S ***********************************)
errorbadTask * = -1; (* IffError() called by wrong task *)
erroropen * = 16; (* Can't open file *)
errorread * = 17; (* Error reading file *)
errornoMem * = 18; (* Not enough memory *)
errornotIff * = 19; (* File is not an IFF file *)
errorwrite * = 20; (* Error writing file *)
errornoILBM * = 24; (* IFF file is not of type ILBM *)
errornoBMHD * = 25; (* BMHD chunk not found *)
errornoBODY * = 26; (* BODY chunk not found *)
errorbadCompression * = 28; (* Unknown compression type *)
errornoANHD * = 29; (* ANHD chunk not found *)
errornoDLTA * = 30; (* DLTA chunk not found *)
(************** Common IFF IDs ******************************************)
(*
* Universal IFF identifiers.
*)
idFORM * = sys.VAL(LONGINT,"FORM");
idLIST * = sys.VAL(LONGINT,"LIST");
idCAT * = sys.VAL(LONGINT,"CAT ");
idPROP * = sys.VAL(LONGINT,"PROP");
idNULL * = sys.VAL(LONGINT," ");
(*
* Specific IFF IDs
*)
idANIM * = sys.VAL(LONGINT,"ANIM");
idANHD * = sys.VAL(LONGINT,"ANHD");
idANNO * = sys.VAL(LONGINT,"ANNO");
idBMHD * = sys.VAL(LONGINT,"BMHD");
idBODY * = sys.VAL(LONGINT,"BODY");
idCAMG * = sys.VAL(LONGINT,"CAMG");
idCLUT * = sys.VAL(LONGINT,"CLUT");
idCMAP * = sys.VAL(LONGINT,"CMAP");
idCRNG * = sys.VAL(LONGINT,"CRNG");
idCTBL * = sys.VAL(LONGINT,"CTBL");
idDLTA * = sys.VAL(LONGINT,"DLTA");
idILBM * = sys.VAL(LONGINT,"ILBM");
idSHAM * = sys.VAL(LONGINT,"SHAM");
id8SVX * = sys.VAL(LONGINT,"8SVX");
idATAK * = sys.VAL(LONGINT,"ATAK");
idNAME * = sys.VAL(LONGINT,"NAME");
idRLSE * = sys.VAL(LONGINT,"RLSE");
idVHDR * = sys.VAL(LONGINT,"VHDR");
(****************************************************************************
* Modes for OpenIFF()
*)
modeRead * = 0;
modeWrite * = 1;
(****************************************************************************
* Modes for CompressBlock() and DecompressBlock()
*)
comprNone * = 0000H; (* generic *)
comprByteRun1 * = 0001H; (* ILBM *)
comprFibDelta * = 0101H; (* 8SVX *)
(************** S T R U C T U R E S *************************************)
TYPE
HandlePtr * = UNTRACED POINTER TO Handle;
Handle * = RECORD (* private ! *)
file : e.BPTR; (* DOS file handle *)
formSize : LONGINT; (* Größe des gesamten FORM *)
chunkSize : LONGINT; (* Größe des aktuellen Chunks *)
chunkFPos : LONGINT; (* Position im File wo dieser Chunk beginnt *)
END;
ChunkPtr * = UNTRACED POINTER TO Chunk;
Chunk * = RECORD
ckID * : LONGINT;
ckSize * : LONGINT;
ckData * : ARRAY 1048576 OF SHORTINT; (* ARRAY ckSize OF SHORTINT *)
END;
BitMapHeaderPtr * = UNTRACED POINTER TO BitMapHeader;
BitMapHeader * = RECORD
w* , h*, x*, y * : INTEGER;
nPlanes * : SHORTINT;
masking * : SHORTINT;
compression * : SHORTINT;
pad1 * : SHORTINT;
transparentColor * : INTEGER;
xAspect * : SHORTINT;
yAspect * : SHORTINT;
pageWidth * : INTEGER;
pageHeight * : INTEGER;
END;
AnimHeaderPtr * = UNTRACED POINTER TO AnimHeader;
AnimHeader * = RECORD
operation * : SHORTINT;
mask * : SHORTINT;
w*,h*,x*,y * : INTEGER;
absTime * : LONGINT;
relTime * : LONGINT;
interLeave * : SHORTINT;
pad0 * : SHORTINT;
bits * : LONGINT;
pad * : ARRAY 16 OF SHORTINT;
END;
(*********************** L I B R A R Y - B A S E ************************)
VAR
base * : e.LibraryPtr;
(************** F U N C T I O N D E C L A R A T I O N S ***************)
(* obsolete *)
PROCEDURE OldOpenIFF * {base,-30}(fileName{8}: ARRAY OF CHAR): HandlePtr;
PROCEDURE CloseIFF * {base,-36}(iffFile{9}: HandlePtr);
PROCEDURE FindChunk * {base,-42}(iffFile{9}: HandlePtr;
hunkName{0}: LONGINT): ChunkPtr;
PROCEDURE GetBMHD * {base,-48}(iffFile{9}: HandlePtr): BitMapHeaderPtr;
PROCEDURE GetColorMap * {base,-54}(iffFile{9}: HandlePtr;
colorTable{8}: ARRAY OF INTEGER): LONGINT;
PROCEDURE DecodePic * {base,-60}(iffFile{9}: HandlePtr;
bitmap{8}: Graphics.BitMapPtr): BOOLEAN;
PROCEDURE SaveBitMap * {base,-66}(fileName{8}: ARRAY OF CHAR;
bitMap{9}: Graphics.BitMapPtr;
colorTable{10}: ARRAY OF CHAR;
flags{0}: SET): BOOLEAN;
PROCEDURE SaveClip * {base,-72}(fileName{8}: ARRAY OF CHAR;
bitmap{9}: Graphics.BitMapPtr;
coltab{10}: ARRAY OF CHAR;
flags{0}: SET;
xoff{1}, yoff{2}: INTEGER;
width{3}, height{4}: INTEGER): BOOLEAN;
PROCEDURE IffError * {base,-78}(): LONGINT;
PROCEDURE GetViewModes * {base,-84}(iffFile{9}: HandlePtr): LONGSET;
(* private and obsolete *)
PROCEDURE OldNewOpenIFF * {base,-90}(name{8}: ARRAY OF CHAR;
memattr{0}: LONGSET): e.ADDRESS;
PROCEDURE ModifyFrame * {base,-96}(modifyform{9}: e.APTR;
bitmap{8}: Graphics.BitMapPtr);
PROCEDURE OpenIFF * {base, -120}(name{8}: ARRAY OF CHAR;
mode{0}: LONGINT): HandlePtr;
PROCEDURE PushChunk * {base, -126}(iff{8}: HandlePtr;
type{0}: LONGINT;
id{1}: LONGINT);
PROCEDURE PopChunk * {base, -132}(iff{8}: HandlePtr): BOOLEAN;
PROCEDURE WriteChunkBytes * {base, -138}(iff{8}: HandlePtr;
buf{9}: ARRAY OF CHAR;
size{0}: LONGINT);
PROCEDURE CompressBlock * {base, -144}(source{8}: ARRAY OF sys.BYTE;
VAR destination{9}: ARRAY OF sys.BYTE;
size{0}: LONGINT;
mode{1}: LONGSET);
PROCEDURE DecompressBlock * {base, -150}(source{8}: ARRAY OF sys.BYTE;
VAR destination{9}: ARRAY OF sys.BYTE;
size{0}: LONGINT;
mode{1}: LONGSET);
(* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
BEGIN
base := e.OpenLibrary(iffName,iffVersion);
IF base = NIL THEN
IF i.DisplayAlert(0,"\x00\x64\x14missing iff.library V22\o\o",50) THEN END;
HALT(20)
END; (* IF *)
CLOSE
IF base # NIL THEN
e.CloseLibrary(base)
END; (* IF *)
END IFFLib.